/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.igorov.efficientsoft.business.gestorusuario;

import com.igorov.efficientsoft.dataaccess.domain.UsuarioDAO;
import com.igorov.efficientsoft.dataaccess.model.TperfilVO;
import com.igorov.efficientsoft.dataaccess.model.TrolVO;
import com.igorov.efficientsoft.dataaccess.model.TusuarioVO;
import com.igorov.efficientsoft.dataaccess.model.TzonaVO;
import com.igorov.efficientsoft.services.PerfilDTO;
import com.igorov.efficientsoft.services.TareaDTO;
import com.igorov.efficientsoft.services.UsuarioDTO;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author igorov
 */
public class GestorUsuarioImpl implements GestorUsuario{

    private UsuarioDAO usuarioDAO;

    public GestorUsuarioImpl() {
    }
     

    public UsuarioDAO getUsuarioDAO() {
        return usuarioDAO;
    }

    public void setUsuarioDAO(UsuarioDAO usuarioDAO) {
        this.usuarioDAO = usuarioDAO;
    }
    
    public UsuarioDTO getByLogin(String usuario, String password) {
        TusuarioVO tusuarioVO = usuarioDAO.getByLogin(usuario, password);
        UsuarioDTO usuarioDTO = null;
        
        if (tusuarioVO != null) {
            usuarioDTO = new UsuarioDTO();
            usuarioDTO.setCodigo(tusuarioVO.getNcodUsu());
            usuarioDTO.setDni(tusuarioVO.getCdniUsu());
            usuarioDTO.setNombre(tusuarioVO.getCnomUsu());
            usuarioDTO.setApellido(tusuarioVO.getCapeUsu());
            usuarioDTO.setDireccion(tusuarioVO.getTdirecUsu());
            usuarioDTO.setPassword(tusuarioVO.getCpassUsu());
            usuarioDTO.setEstado(tusuarioVO.isLactivo());
            
            TperfilVO tperfilVO = tusuarioVO.getTperfil();
            PerfilDTO perfilDTO = new PerfilDTO();
            perfilDTO.setCodigo(tperfilVO.getNcodPerf());
            perfilDTO.setNombre(tperfilVO.getCnomPerf());
            
            List<TrolVO> trolVOs = new ArrayList<TrolVO>(tperfilVO.getTrols());
            List<TareaDTO> tareaDTOs = new LinkedList<TareaDTO>();
            for (Iterator<TrolVO> it = trolVOs.iterator(); it.hasNext();) {
                TrolVO trolVO = it.next();
                TareaDTO tareaDTO = new TareaDTO();
                tareaDTO.setCodigo(trolVO.getTtarea().getNcodTar());
                tareaDTO.setDescripcion(trolVO.getTtarea().getTtareacol());
                
                tareaDTOs.add(tareaDTO);
            }
            perfilDTO.setTareaDTOs(tareaDTOs);
            usuarioDTO.setPerfilDTO(perfilDTO);
            
        }
        return usuarioDTO;
    }

    public void deleteById(int i) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void deleteByIndex(int index) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public List<UsuarioDTO> getAll() {
        List<UsuarioDTO> usuarioDTOs = new LinkedList<UsuarioDTO>();
        List<TusuarioVO> tusuarioVOs = usuarioDAO.getAll();
        for (Iterator<TusuarioVO> it = tusuarioVOs.iterator(); it.hasNext();) {
            TusuarioVO tusuarioVO = it.next();
            
            UsuarioDTO usuarioDTO = new UsuarioDTO();
            usuarioDTO.setCodigo(tusuarioVO.getNcodUsu());
            usuarioDTO.setDni(tusuarioVO.getCdniUsu());
            usuarioDTO.setNombre(tusuarioVO.getCnomUsu());
            usuarioDTO.setApellido(tusuarioVO.getCapeUsu());
            usuarioDTO.setDireccion(tusuarioVO.getTdirecUsu());
            usuarioDTO.setPassword(tusuarioVO.getCpassUsu());
            usuarioDTO.setEstado(tusuarioVO.isLactivo());
            
            TperfilVO tperfilVO = tusuarioVO.getTperfil();
            PerfilDTO perfilDTO = new PerfilDTO();
            perfilDTO.setCodigo(tperfilVO.getNcodPerf());
            perfilDTO.setNombre(tperfilVO.getCnomPerf());
            
            List<TrolVO> trolVOs = new ArrayList<TrolVO>(tperfilVO.getTrols());
            List<TareaDTO> tareaDTOs = new LinkedList<TareaDTO>();
            
//            for (Iterator<TrolVO> it2 = trolVOs.iterator(); it2.hasNext();) {
//                TrolVO trolVO = it2.next();
//                TareaDTO tareaDTO = new TareaDTO();
//                tareaDTO.setCodigo(trolVO.getTtarea().getNcodTar());
//                tareaDTO.setDescripcion(trolVO.getTtarea().getTtareacol());
//                
//                tareaDTOs.add(tareaDTO);
//            }
//            perfilDTO.setTareaDTOs(tareaDTOs);
            usuarioDTO.setPerfilDTO(perfilDTO);
            
            usuarioDTOs.add(usuarioDTO);
        }
        
        return usuarioDTOs;
    }

    public UsuarioDTO getById(int voId) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public UsuarioDTO getByIndex(int indice) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public int getIdAtIndex(int indice) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public int getIndexOf(int voId) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void saveOrUpdate(UsuarioDTO o) {
        TusuarioVO tusuarioVO = new TusuarioVO();
        if (o.getCodigo() != 0)
            tusuarioVO.setNcodUsu(o.getCodigo());
        tusuarioVO.setCapeUsu(o.getApellido());
        tusuarioVO.setCdniUsu(o.getDni());
        tusuarioVO.setCnomUsu(o.getNombre());
        tusuarioVO.setCpassUsu(o.getPassword());
        tusuarioVO.setCtelUsu(o.getTelefono());
        tusuarioVO.setLactivo(o.isEstado());
        tusuarioVO.setTdirecUsu(o.getDireccion());
        
        TzonaVO tzonaVO = new TzonaVO();
        tzonaVO.setNcodZon(o.getIdZona());
        
        TperfilVO tperfilVO = new TperfilVO();
        tperfilVO.setNcodPerf(o.getPerfilDTO().getCodigo());
        
        tusuarioVO.setTzona(tzonaVO);
        tusuarioVO.setTperfil(tperfilVO);
        
        usuarioDAO.saveOrUpdate(tusuarioVO);
    }

    public void updateListVo() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
}
